<?php

$this->useClass("Handler_Community");
class Action_Community_JoinCommunity extends Handler_Community
{
	private function getCommunityUsers() {
		$this->rh->UseClass("AggregatedModel_Feed_FeedInterface");
		$this->rh->UseClass("AggregatedModel_Feed_ReaderUsers");

		$model = new AggregatedModel_Feed_ReaderUsers();
		$model->rh = $this->rh;
		$model->setModelParams( 'community_oid', $this->aa->acl_data['comity_oid'] );
		$model->doStuff();
		return $model->getItems();
	}

	public function process ()
	{

		$response = $this->rh->response;

		$acl_assistant = $this->aa;
		$this->ctx->db->begin();
		$acl_data = $acl_assistant->getInfo();

		if (isset($acl_data['comity_oid'])) {
			// FIXME : 2007-11-23 : lucky
			// честно проверять привелегии is_granted
			switch ($acl_data['role']['name']) {
			case 'registered':
				// анонимус пытается присоединиться
				if ($acl_data['user']['user_id']) {
					$users = $this->getCommunityUsers();
					if ( 0 == count($users) ) {
						$status = $this->joinCommunity( $acl_data['comity_oid'], $acl_data['user']['user_id'], 'moderator' );
					} else {
						// пользователь зарегистирован на узле и аноним в сообществе
						//
						// пользователь вступает в сообщество
						$status = $this->joinCommunity( $acl_data['comity_oid'], $acl_data['user']['user_id'] );
					}
					if ($status==0) {
						$view = $this->rh->views->findByName('join_message');
						$acl_data = $acl_assistant->getInfo(); // читаем занова
						$view->data = $acl_assistant->template_data;
					} elseif ($status==1) {
						// подготовим сообщение
						$message = $acl_assistant->template_data;

						$this->rh->UseClass("RL_URLGenerator");
						$ug = new RL_URLGenerator($this->rh->router->getRule('community_join_queue'));
						$ug->setRouter($this->rh->router);
						$ug->setParams($this->params);
						$message["jq_url"] = $ug->generateUrl();

						$this->rh->UseClass("Model_MailOutbox");
						$outbox = new Model_MailOutbox( $this->rh, $acl_assistant);
						$outbox->template = 'email/new_member_request.html';
						$outbox->delete_after_send = true;

						// ид-шники модераторов сообщества
						$moders = $acl_assistant->getUsersByRoleAlias( $acl_data['comity_oid'], "moderator" );
						foreach ($moders as $k=>$oid) {
							$user = $this->ctx->store->getObject($oid);

							if ( !isset($user->data['email']) || (strlen(trim($user->data['email']))==0) ) {
								// проходим к следующей итерации если мыла у модера нету
								continue;
							}

							$user_msg = $message;
							$user_msg['user'] = $user->data['fullname'];
							$user_msg['to'] = $user->data['email'];

							// положить в очередь на отправку
							$outbox->post($user_msg);

						}

						// отослать почту
						$outbox->list->select()->each(array($outbox, 'send'), $outbox->list);

						$view = $this->rh->views->findByName('join_premoderated');
						$view->data = $acl_assistant->template_data;

					} else {
						$view = "Вы не добавлены в сообщество, что-то пошло не так. ";
					}
					break;
				}
			case 'anonymous':
					// пользователь не зарегистирован на узле или забыл залогиниться
					//
					// покажем специальное сообщение
					$view = $this->rh->views->findByName('join_unknown');
					$view->data = $acl_assistant->template_data;
					break;
			default:
				// член сообщества пытается присоединится.
				//
				// покажем специальное сообщение
				$view = $this->rh->views->findByName('join_joined');
				$acl_data = $acl_assistant->getInfo(); // читаем занова
				$view->data = $acl_assistant->template_data;
			}
		} else {
			// это даже не сообщество
			//
			// покажем 404
			$view = NULL;
		}

		$response->setContent($view);

		$this->ctx->db->end();

	} // end of function process

}

